package es.qb.deportivos.pl.controller;

import java.util.ArrayList;
import java.util.List;

import org.primefaces.model.chart.CartesianChartModel;
import org.springframework.stereotype.Controller;
import org.springframework.webflow.context.ExternalContext;

import es.qb.deportivos.exception.GeneralBusinessException;
import es.qb.deportivos.exception.GeneralPLException;
import es.qb.deportivos.il.domain.Partido;
import es.qb.deportivos.il.helper.PartidoHelper;
import es.qb.deportivos.util.Constants;
import es.qb.deportivos.util.Utilities;

/**
 * Controller asociado a la pantalla de Partidos.
 * 
 */
@Controller
public class PartidoController {

	/**
	 * Atributo partidoHelper
	 */
	public PartidoHelper partidoHelper;

	/**
	 * @return the partidoHelper
	 */
	public PartidoHelper getPartidoHelper() {
		return partidoHelper;
	}

	/**
	 * @param partidoHelper
	 *            the partidoHelper to set
	 */
	public void setPartidoHelper(PartidoHelper partidoHelper) {
		this.partidoHelper = partidoHelper;
	}

	/**
	 * Inicializacion de un Partido
	 * 
	 * @return Partido
	 */

	public Partido nuevoPartido() {

		Partido partido = new Partido();

		return partido;
	}

	public List<Partido> cargarPartidos() throws GeneralPLException {

		return partidoHelper.cargarPartidos();

	}

	public Partido cargarPartido(ExternalContext ext) throws GeneralPLException {

		Partido partido = nuevoPartido();

		Integer jugadorId = Utilities.sessionMapRecuperar(ext, Constants.SESSIONMAP_ID_JUGADOR);
		Integer partidoId = Utilities.sessionMapRecuperar(ext, Constants.SESSIONMAP_ID_PARTIDO);

		if (partidoId != null) {

			partido = partidoHelper.buscarPartidoById(partidoId, jugadorId);
		}

		return partido;

	}

	public Partido seleccionarPartido(ExternalContext ext, Integer partidoId) throws GeneralPLException {

		Partido partido = nuevoPartido();

		Utilities.sessionMapInsertar(ext, Constants.SESSIONMAP_ID_PARTIDO, partidoId);

		partido = partidoHelper.buscarPartidoById(partidoId, null);

		return partido;

	}

	public Partido guardarPuntos(ExternalContext ext, Partido partido) throws GeneralPLException {

		partidoHelper.guardarPuntos(partido);

		return partido;

	}

	public Boolean hasJugadoPartido(ExternalContext ext) throws GeneralPLException {

		Integer partidoId = Utilities.sessionMapRecuperar(ext, Constants.SESSIONMAP_ID_PARTIDO);
		Integer jugadorId = Utilities.sessionMapRecuperar(ext, Constants.SESSIONMAP_ID_JUGADOR);

		Partido partido = partidoHelper.buscarPartidoById(partidoId, null);

		return partidoHelper.hasJugadoPartido(partido, jugadorId);

	}

	public Partido mostrarDetallesPartido(Partido partido) {
		return partido;
	}

	public Partido guardarGolesPartido(Partido partido) throws GeneralBusinessException {

		partidoHelper.guardarGoles(partido);

		return null;
	}

	public CartesianChartModel estadisticaVisual(Integer jugador) throws GeneralBusinessException, GeneralPLException, NumberFormatException {

		CartesianChartModel estadisticaVisual = partidoHelper.estadisticaVisual(jugador);

		return estadisticaVisual;
	}

	public List<String> cargarPartidosTesoreria() throws GeneralPLException {
		List<String> fechaPartidos = new ArrayList<String>();

		List<Partido> cargarPartidos = cargarPartidos();

		for (Partido partido : cargarPartidos) {
			fechaPartidos.add("Partido " + partido.getFecha().toString());
		}

		return fechaPartidos;
	}
}
